[求助]关于单片机A/D转换后的数据处理
来源:百度知道 编辑:UC知道 时间:2024/05/09 06:47:47
楼上的不对,你没考虑参考电压怎么可能写对
假设参考电压是5v(也就是说,当你读入的10位数据为0b1111 1111 11时候,电压是5V,这个值是根据你接的参考电压选的)
a=ADC_DATA;
b=ADC_LOW;
a=a*4+b;
这个时候,a里面保存的是ADC的读数,不是实际电压值
double x;
x = 5.0 * a / 1023.0;注意要写.0,否则,int除int是整除
这个时候,x中得到的数据就是实际电压。
当然,如果这个数是有实际意义的物理量,这里要把x用对应公式计算为该物理量,如果想输出的就是得到的a这个无意义比例值,直接x=a;
然后就是把这个转为8位数码管
如果转换为定点数据,很简单:
unsigned char outData[8];
outData[0] = (unsigned char)(x);//由于x最大为5,所以整数部分直接处理,否则要整除,
x = x - outData[0];//把整数部分减掉
x = x * 10;//把下一位移到整数部分
outData[1] = (unsigned char)(x);//这样读出0.1这一位
上面是原理,为了让你明白,实际程序如下:
unsigned char outData[8];
x = x / 1.0;//后面常数是你的最高位,如果是10位就是除10.0,同样可以为0.1
for(i = 0;i<8;i++)
{
outData[i] = (unsigned char)x;
x = x - outData[i];
x = x*10;
}
这个时候,数组outData中就是你要的各位数据了,输出你会吧,别忘了点小数点。
另:有个东西可能你犯糊涂了,AD采样那个10位是2进制10位,也就是0到1023,数码管8位是10进制8位。也就是0到999999
如果你想输出8位2进制的话(就是p2口直接连8个发光二极管),那